#include <iostream>
#include <unistd.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <sys/types.h>
#include <cstdlib>
#include <cstring>


using namespace std;

#define SIZE 4096
#define NUM 0x7777
#define PATH "/home/lz_101/class33"

key_t GetKey()
{
    key_t n = ftok(PATH,NUM);
    if(n == -1)
    {
        perror("ftok fail");
        exit(-1);
    }
    return n;
}

// 提供获取共享内存的方法 创建/直接用
int GetMethodShm(int shmflg)
{
    key_t key = GetKey();
    cout<<"生成key:"<<key<<endl;

    int shmid = shmget(key,SIZE,shmflg);
    if(shmid == -1)
    {
        perror("shmget fail");
        exit(-1);
    }

    return shmid;
}

// 创建并获取共享内存
int CreatShm()
{
    return GetMethodShm(IPC_CREAT|IPC_EXCL|0666);
}

// 直接获取共享内存
int GetShm()
{
    return GetMethodShm(IPC_CREAT);
}